// 题目管理相关接口
// 根据后端API规范重新设计的数据结构
export interface ProblemCreateRequest {
  problem: Problem;
  samples: ProblemCase[];
  isUploadTestCase: boolean;
  uploadTestcaseDir?: string;
  judgeMode: string;
  languages: ProblemLanguage[];
  problemTags: Tag[];
}

// 题目基本信息
export interface Problem {
  problemId?: string; // 问题的自定义ID 例如(swust-1000）
  status: number; // 是否启用1:启用 0:禁用
  title: string; // 题目标题
  author: string; // 作者
  type: number; // 0为ACM,1为OI
  timeLimit: number; // 单位ms(c/c++默认1000，其他默认2000)
  memoryLimit: number; // 单位kb
  stackLimit: number; // 单位mb
  description: string; // 描述
  inputDescription: string; // 输入描述
  outputDescription: string; // 输出描述
  isRemote?: number; // 是否为远程判题
  source?: string; // 题目来源（出处）
  difficulty: number; // 题目难度 默认0代表未知 ,1简单，2中等，3困难
  hint?: string; // 备注,提醒
  auth: number; // 默认为1公开，2为私有，3为比赛题目，4训练题目
  ioScore?: number; // 当该题目为io题目时的分数，默认100
  codeShare?: number; // 该题目对应的相关提交代码，用户是否可用分享
  judgeMode: string; // 题目评测模式,default、spj、interactive
  judgeCaseMode: string; // 题目样例评测模式,default,subtask_lowest,subtask_average
  userExtraFile?: string; // 题目评测时用户程序的额外文件 json key:name value:content
  judgeExtraFile?: string; // 题目评测时交互或特殊程序的额外文件 json key:name value:content
  spjCode?: string; // 特判程序或交互程序代码
  spjLanguage?: string; // 特判程序或交互程序代码的语言
  isRemoveEndBlank?: number; // 是否默认去除用户代码的文末空格
  openCaseResult?: number; // 是否默认开启该题目的测试样例结果查看
  isUploadCase?: number; // 题目测试数据是否是上传文件的
  caseVersion?: string; // 题目测试数据的版本号
  modifiedUser?: string; // 修改题目的管理员用户名
  isGroup?: number;
  gid?: number;
  applyPublicProgress?: number; // 申请公开的进度：null为未申请，1为申请中，2为申请通过，3为申请拒绝
  isFileIo?: number; // 是否是file io自定义输入输出文件模式
  ioReadFileName?: string; // 题目指定的file io输入文件的名称
  ioWriteFileName?: string; // 题目指定的file io输出文件的名称
  content?: string; // 题目内容
  isShowJudgeDetails?: number; // 是否显示评测详情
}

// 题目测试样例
export interface ProblemCase {
  input: string; // 测试样例的输入
  output: string; // 测试样例的输出
  score?: number; // 该测试样例的IO得分
  status?: number; // 0可用，1不可用
}

// 题目支持的编程语言
export interface ProblemLanguage {
  name: string; // 语言名称
  codeTemplate?: string; // 代码模板
}

// 题目标签
export interface Tag {
  id?: number; // 主键id
  name: string; // 标签名字
  color: string; // 标签颜色
  oj: string; // 标签所属oj
  gid: number;
  tcid?: number;
}






export interface ProblemCreateResponse {
  code: number;
  message: string;
  data: string;
}



// 获取题目列表请求参数
export interface ProblemListRequest {
  page?: number;           // 页码，默认1
  size?: number;           // 分页大小，默认5
  sortBy?: string;         // 排序字段
  isAsc?: boolean;         // 排序方式，默认true（升序）
  keyword?: string;        // 搜索关键字
  tagId?: number[];        // 标签ID数组
  OJ?: number;             // 来源oj
  difficulty?: number;     // 题目难度
  status?: number;         // 题目状态
}

// 获取题目列表响应
export interface ProblemListResponse {
  code: number;
  message: string;
  data: {
    list: ProblemListItem[];    // 题目列表
    total: string;              // 总数量（字符串格式）
    pages: string;              // 总页数（字符串格式）
  };
}

// 题目列表项
export interface ProblemListItem {
  id: string;                    // 题目ID
  problemId: string;             // 题目标题ID
  title: string;                 // 题目标题
  difficulty: number;            // 难度等级
  type: number;                  // 题目类型
  tags: Tag[] | null;            // 标签列表
  problemCount?: {               // 题目统计信息
    id: number;
    pid: string;
    ac: number;                  // 通过次数
    ce: number;                  // 编译错误
    wa: number;                  // 答案错误
    re: number;                  // 运行时错误
    tle: number;                 // 时间超限
    mle: number;                 // 内存超限
    total: number;               // 总提交次数
    se: number;                  // 系统错误
  } | null;
}